#include "form.h"
#include "ui_form.h"

/*QTimer: 用于定时触发事件，更新进度条。
QFile: 用于读取和写入文件。
QMenuBar 和 QMenu: 用于创建菜单栏和菜单项。
QFileDialog: 用于打开文件对话框。
QProgressBar: 用于显示进度条。
QListWidget: 用于显示文件列表。
QTextEdit: 用于显示和编辑文件内容。*/
Form::Form(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Form)
{
    ui->setupUi(this);
    currentindex = -1; // 初始化当前选择的索引

    // 创建并启动一个定时器，每100毫秒触发一次
    QTimer * ptimer = new QTimer;
    ptimer->start(100);
    connect(ptimer, SIGNAL(timeout()), this, SLOT(timer())); // 连接定时器超时信号到槽函数

    // 设置进度条的范围和初始值
    ui->progressBar->setRange(0, 100);
    ui->progressBar->setValue(0);

    // 向列表控件中添加项目
    new QListWidgetItem("form.cpp", ui->listWidget);
    new QListWidgetItem("mainwindow.cpp", ui->listWidget);
    new QListWidgetItem("mylabel.cpp", ui->listWidget);

    // 读取并应用样式表文件
    QFile file("E:/【05临时文件】/form.qss");
    if (file.open(QFile::ReadOnly)) {
        QString stylesheet = QString(file.readAll());
        setStyleSheet(stylesheet);
        file.close();
    }

    // 创建菜单栏
    QMenuBar * menubar = new QMenuBar(this);
    menubar->setGeometry(QRect(0, 0, 2000, 10));

    // 添加菜单项
    QMenu * filep = menubar->addMenu("文件");
    QMenu * filew = menubar->addMenu("编辑");

    filep->addAction("新建文件");

    // 加载图标
    QPixmap pixmap;
    if (false == pixmap.load("E:/1.png")) {
        qDebug() << "加载失败" << endl;
    }

    // 添加菜单动作并连接信号槽
    QAction * popfile = filep->addAction("打开文件");
    connect(popfile, SIGNAL(triggered()), this, SLOT(trigger()));
    QAction * popfile1 = filep->addAction("保存文件");
    connect(popfile1, SIGNAL(triggered()), this, SLOT(trigger()));
    QAction * popfile2 = filep->addAction(QIcon(pixmap), "退出");
    connect(popfile2, SIGNAL(triggered()), this, SLOT(trigger()));

    // 添加编辑菜单项
    filew->addAction("撤回");
    filew->addAction("复制");
    filew->addAction("粘贴");
    filew->addAction("剪切");
    filew->addAction("全选");

    // 创建布局
    QVBoxLayout *layout = new QVBoxLayout(this);
    layout->setMenuBar(menubar);

    // 设置布局
    setLayout(layout);
}

// 定时器槽函数，更新进度条
void Form::timer()
{
    ui->progressBar->setValue(ui->progressBar->value() + 1);
}

// 菜单动作触发槽函数，打开文件对话框
void Form::trigger()
{
    QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"), "E:/【05临时文件】", tr("*.cpp"));
}

Form::~Form()
{
    delete ui; // 释放UI资源
}

// 列表控件当前行改变槽函数，加载对应的文件内容
void Form::on_listWidget_currentRowChanged(int currentRow)
{
    currentindex = currentRow;
    QFile *pfile;
    if (currentRow == 0) {
        pfile = new QFile("E:/【05临时文件】/form.cpp");
    } else if (currentRow == 1) {
        pfile = new QFile("E:/【05临时文件】/mainwindow.cpp");
    } else if (currentRow == 2) {
        pfile = new QFile("E:/【05临时文件】/mylabel.cpp");
    }
    if (pfile->open(QFile::ReadOnly)) {
        QString text = QString(pfile->readAll());
        ui->textEdit->setText(text); // 将文件内容显示在文本编辑框中
        pfile->close();
        delete pfile;
    }
}

// 按钮点击槽函数，保存文本编辑框中的内容到文件
void Form::on_pushButton_clicked()
{
    QFile *pfile;
    if (currentindex == 0) {
        pfile = new QFile("E:/【05临时文件】/form.cpp");
    } else if (currentindex == 1) {
        pfile = new QFile("E:/【05临时文件】/mainwindow.cpp");
    } else if (currentindex == 2) {
        pfile = new QFile("E:/【05临时文件】/mylabel.cpp");
    }
    if (pfile->open(QFile::WriteOnly)) {
        QString str = ui->textEdit->toPlainText();
        pfile->write(str.toLatin1()); // 将文本编辑框中的内容写入文件
        qDebug() << "保存成功" << endl;
        pfile->close();
        delete pfile;
    }
}

